$(document).ready(function() {
    // Asigna la opcion del menu a esta pagina
    //$(...).addClass("current_page_item");

    // Enlaza los datos de la tabla
    ko.applyBindings(new EmpresasViewModel());

    // Evento de boton cancelar y esconde
    $(".cancelar")
            .bind('click', terminaEdit)
            .hide();
});

function EmpresasViewModel() {
    var self = this;
    //Empresas
    self.empresas = ko.observableArray();
    $.getJSON('ObtenEmpresas', self.empresas);

    self.create = function() {
        // Crea objeto con los datos del formulario
        var tmp = {
            id: $('#id').val(),
            nombre: $('#nombre').val(),
            direccion: $('#direccion').val(),
            telefono: $('#telefono').val(),
            propietario: $('#propietario').val()
        };

        var json = JSON.stringify(tmp);
        $.post("AgregaEmpresa", json,
                function(data) {
                    var obj = jQuery.parseJSON(data);
                    var index = obtenObjetoEmpresa(self.empresas(), obj.id);

                    if (index === -1) {
                        // Agrega
                        self.empresas.push(obj);
                        index = self.empresas().length;
                    } else {
                        // Edita
                        self.empresas()[index] = obj;
                        index = index + 1;

                        // Al hacer esta accion la tabla actualiza los datos
                        self.empresas.sort();
                    }

                    // Hace efecto en la fila manipulada
                    efectoEnFila(index);

                    // Desaparece el boton cancelar
                    terminaEdit();
                })
                .error(
                function(data) {
                    alert("ERROR: " + data.responseText);
                });
    };

    self.delete = function(empresa) {
        if (confirm('¿Seguro que desea eliminar esta empresa?')) {
            var json = JSON.stringify(empresa);
            $.post("EliminaEmpresa", json,
                    function() {
                        self.empresas.remove(empresa);
                        validaTabla();
                    })
                    .error(
                    function(data) {
                        alert("ERROR: " + data.responseText);
                    });
        }
    };

    self.update = function(empresa) {
        // Asigna el valor de los campos al objeto seleccionado
        $('#id').attr('value', empresa.id);
        $('#nombre').attr('value', empresa.nombre);
        $('#direccion').attr('value', empresa.direccion);
        $('#telefono').attr('value', empresa.telefono);
        $('#propietario').attr('value', empresa.propietario);


        // Lee el indice de la fila seleccionada
        var index = obtenObjetoEmpresa(self.empresas(), empresa.id) + 1;
        efectoEnFila(index);

        // Hace que el campo de id de Empresa no sea editable
        $("#id").attr('readonly', true);
        $("#id").addClass('readonly');

        // Hace aparecer el boton cancelar
        $(".cancelar")
                .fadeIn()
                .prop('disabled', false);
    };
}

function terminaEdit() {
    $('.cancelar')
            .fadeOut(500)
            .attr('disabled', 'disabled');
    $('#id.readonly')
            .removeAttr('readonly')
            .removeClass('readonly');
}

function efectoEnFila(index) {
    var fila = $('#tablaDatos #tabla tr:eq(' + index + ')');
    $(fila).fadeTo('fast', 0.3).fadeTo('fast', 1);
}

function obtenObjetoEmpresa(array, idEmpresa) {
    var res = -1;
    $.each(array, function(index, value) {
        if (value.id == idEmpresa) {
            res = index;
        }
    });
    return res;
}

function limpiarCampos() {
    terminaEdit();
    $('#id').attr('value', "");
    $('#nombre').attr('value', "");
    $('#direccion').attr('value', "");
    $('#telefono').attr('value', "");
    $('#propietario').attr('value', "");
}